home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / vbcc / machines / amiga68k / libsrc / _lmath.s < prev    next >
Encoding:
Text File  |  1995-09-11  |  2.1 KB  |  160 lines

  1. ;   32bit Division/Modulo fuer 68000
  2.  
  3. * Functions:
  4. *  long           __divu(register long d0, register long d1)
  5. *  long           __divs(register long d0, register long d1)
  6. *  long           __modu(register long d0, register long d1)
  7. *  long           __mods(register long d0, register long d1)
  8. ;  __ldivs etc. erwarten Parameter auf dem Stack
  9.  
  10.  
  11.  code
  12.  
  13.     xdef    __ldivs
  14.     xdef    __ldivu
  15.     xdef    __lmods
  16.     xdef    __lmodu
  17.  
  18. __ldivs
  19.     movem.l 4(sp),d0/d1
  20.     bra     __divs
  21. __ldivu
  22.     movem.l 4(sp),d0/d1
  23.     bra     __divu
  24. __lmods
  25.     movem.l 4(sp),d0/d1
  26.     bra     __mods
  27. __lmodu
  28.     movem.l 4(sp),d0/d1
  29.     bra     __modu
  30.  
  31.  
  32. __mods:
  33.  tst.l   d1
  34.  bmi.s   1$
  35.  tst.l   d0
  36.  bmi.s   2$
  37.  bsr.s   __divu
  38.  move.l  d1,d0
  39.  rts
  40. 1$:
  41.  neg.l   d1
  42.  tst.l   d0
  43.  bmi.s   3$
  44.  bsr.s   __divu
  45.  neg.l   d1
  46.  move.l  d1,d0
  47.  rts
  48. 2$:
  49.  neg.l   d0
  50.  bsr.s   __divu
  51.  neg.l   d1
  52.  move.l  d1,d0
  53.  rts
  54. 3$:
  55.  neg.l   d0
  56.  bsr.s   __divu
  57.  move.l  d1,d0
  58.  rts
  59.  
  60.  
  61. __modu:
  62.  bsr.s   __divu
  63.  move.l  d1,d0
  64.  rts
  65.  
  66.  
  67. __divs:
  68.  tst.l   d1
  69.  bmi.s   1$
  70.  tst.l   d0
  71.  bmi.s   2$
  72.  bra.s   __divu
  73. 1$:
  74.  neg.l   d1
  75.  tst.l   d0
  76.  bmi.s   3$
  77.  bsr.s   __divu
  78.  neg.l   d0
  79.  rts
  80. 2$:
  81.  neg.l   d0
  82.  bsr.s   __divu
  83.  neg.l   d0
  84.  rts
  85. 3$:
  86.  neg.l   d0
  87.  
  88.  
  89. __divu:
  90.  tst.l   d1
  91.  beq.s   1$
  92.  swap    d1
  93.  tst.w   d1
  94.  bne.s   3$
  95.  move.l  d2,-(sp)
  96.  swap    d1
  97.  move.l  d0,d2
  98.  divu    d1,d2
  99.  bvs.s   2$
  100.  move.l  d2,d1
  101.  clr.w   d1
  102.  swap    d1
  103.  moveq   #0,d0
  104.  move.w  d2,d0
  105.  move.l  (sp)+,d2
  106.  rts
  107. 1$:
  108.  move.l  d0,d1
  109.  moveq   #-1,d0
  110.  rts
  111. 2$:
  112.  move.l  d3,-(sp)
  113.  move.l  d0,d2
  114.  clr.w   d2
  115.  swap    d2
  116.  divu    d1,d2
  117.  move.w  d2,d3
  118.  swap    d3
  119.  clr.w   d3
  120.  move.w  d0,d2
  121.  divu    d1,d2
  122.  move.w  d2,d3
  123.  move.l  d3,d0
  124.  clr.w   d2
  125.  swap    d2
  126.  move.l  d2,d1
  127.  move.l  (sp)+,d3
  128.  move.l  (sp)+,d2
  129.  rts
  130. 3$:
  131.  movem.l d2-d4,-(sp)
  132.  move.l  d0,d2
  133.  clr.w   d2
  134.  swap    d2
  135.  divu    d1,d2
  136.  move.w  d2,d3
  137.  moveq   #0,d2
  138.  move.w  d3,d2
  139.  mulu    d1,d3
  140.  swap    d1
  141.  move.w  d2,d4
  142.  mulu    d1,d4
  143.  swap    d3
  144.  add.l   d4,d3
  145.  sub.l   d3,d0
  146.  bmi.s   4$
  147.  move.l  d0,d1
  148.  move.l  d2,d0
  149.  movem.l (sp)+,d2-d4
  150.  rts
  151. 4$:
  152.  subq.l  #1,d2
  153.  add.l   d1,d0
  154.  bmi.s   4$
  155.  move.l  d0,d1
  156.  move.l  d2,d0
  157.  movem.l (sp)+,d4-d2
  158.  rts
  159.  
  160.